約 3,778,644 件
https://w.atwiki.jp/comcatet/pages/27.html
テキストファイルを結合 var fso = new ActiveXObject( Scripting.FileSystemObject ); var READ = 1; var WRITE = 2; var ADD = 8; var path1 = "c \\temp\\input_1.txt"; var path2 = "c \\temp\\input_2.txt"; var path3 = "c \\temp\\output.txt"; var stream = fso.OpenTextFile(path1, READ); var text = stream.ReadAll(); stream.Close(); stream = fso.OpenTextFile(path2, READ); text += stream.ReadAll(); stream.Close(); stream = fso.OpenTextFile(path3, WRITE, true); stream.Write(text); stream.Close(); ゴミ箱に削除 削除というか、送る。 path は削除するアイテムのパス var shell = new ActiveXObject("Shell.Application"); var recycleBin = shell.NameSpace(10); recycleBin.MoveHere(path); 非同期処理なので削除出来たかどうかの確認が必要 スクリプトが先に終了すると削除されない事になるので注意 fso = new ActiveXObject( Scripting.FileSystemObject ); for (var i = 0; i 5; ++i) { // とりあえず5回(5秒間)だけチェック if (!fso.FileExists(path)) log("ファイル削除完了"); // ファイルの場合 if (!fso.FolderExists(path)) log("フォルダ削除完了"); // フォルダの場合 WScript.sleep(1000); } log("なんか知らんが削除出来てません");
https://w.atwiki.jp/sampleisbest/pages/315.html
開発環境 メモ帳 実行環境 Microsoft Windows 8.1 (64bit) chkpath.js // usage cscript chkpath.js var shell = WScript.CreateObject("WScript.Shell"); var spath = shell.ExpandEnvironmentStrings("%PATH%"); var apath = spath.split(";"); for (p in apath) { var s = apath[p]; if (s.match(/NET/i)) { WScript.Echo(s); } }
https://w.atwiki.jp/suffix/pages/1112.html
JScriptはローカル環境でwindowsを操作するjavascriptです。 より厳密にはJavascriptの標準となるECMAScriptを元にMicrosoftが作った言語。 WSH等からもサポートされている。 WSHとは Windows上のスクリプト実行環境。 徐々にPowerShellに置き換えられつつあるが、実行権限を付与しなくても .wsfファイルをダブルクリックで実行できる等、強みもある。 WSHをサポートする言語としては、他にもVBScript等がある。 VBScriptのコードを元にJScriptに落とし込む際には、 注意事項として、VBScriptは引数無しの関数は()が省略可能なので、 JScriptでそのまま囲うとするとエラーになるケースがある。 例:var ws = WSCript.CreateObject("Shell.Windows"); var obj = ws.windows(); //VBScriptの記述だと、ws.windowsとなっていたりする。 WScriptとは WSHのオブジェクトモデルのルート階層。 対話型でGUIのイメージで、jsファイルをダブルクリック等で呼び出す。 CScriptはコマンドプロンプトのイメージで、cscript xxx.jsのような形で呼び出す。 WScriptObject jsにドラッグ ドロップした時のファイル等は WScript.Arguments等で取得できます。 ちなみにArguments(1)とArguments.Item(1)は同意。 名前付き引数はWScript.Arguments.Named.Item("オプション名")で取れる。 標準入力の値は、 WScript.StdIn.ReadLine()で取得できます。 ActiveXObjectと主な役割 基本的にwindowsコンポーネントを扱う場合には、 WSHやVBScriptから利用する場合はCreateObject(windowsを動かすためのコンポーネント的なもの), JScriptから利用する場合はnew ActiveXObject(windowsを動かすためのコンポーネント的なもの)を利用する。 名称が色々変わっているためややこしいが、ActiveXObject≒OLE≒COMの位置づけである。 細かい違いはMicrosoftのページ等を 参照ということで置いておき、ここでは使い方に注視してみる。 WScript.shell Shell操作(コマンド等) Scripting.FileSystemObject ファイル操作 Scripting.Dictionary ハッシュリストのように使う microsoft.xmldom XML操作 ADODB.stream (バイナリ)ファイルの読み書き ADODB.connection データベースへのアクセス Excel.Application Excel操作 Shell.FolderView explorer操作 Shell.Application explorer操作 ScriptControl 別の言語スクリプトを操作 使用できるActiveXObjectの種類 ActiveXObjectとして、どんなものが使えるかは以下のような方法で知ることが出来る。 regeditでレジストリのHKEY_CLASSES_ROOT(≒HKEY_LOCAL_MACHINE\SOFTWARE)を見る。 こちらのサイトも参考にする。 windows sdkにoleview.exeというCOM情報を見ることができるツールもあるらしい??ので、それを使う。 上記の手段でActiveXObjectを取得したら、以下のようなjavascriptを記述し、 ActiveXObjectのプロパティやプロパティの中身の一覧を得ることで、 色々出来る…かもしれない。 for(property in obj){ console.log(property); console.log(obj[property]); } その他 wmiも操作可能とか。ただし精通していないと使いこなせないので、wmi code creatorを使うと良いかも。 参考: http //wsh.style-mods.net/index.htm http //3rd.geocities.jp/kaito_extra/index.html (典型的なファイル操作等) http //msdn.microsoft.com/ja-jp/library/cc364472.aspx (wsfのxml記述等) https //msdn.microsoft.com/ja-jp/library/cc364460.aspx(wshのリファレンス) 関連: ActiveXObject
https://w.atwiki.jp/sampleisbest/pages/308.html
実行環境 Microsoft Windows 8.1 (64bit) 手順1 適当なディレクトリに下のmml2smf.jsとmml.txtを用意する コマンドプロンプトを起動し先のディレクトリに移動する 以下のコマンドを入力する cscript mml2smf.js mml.txt 手順2 適当なディレクトリに下のmml2smf.jsとmml.txtを用意する mml2smf.jsのショートカットをデスクトップ等に作成する 上のショートカットにmml.txtをDrag Dropする mml2smf.js // OpenTextFile var ForReading = 1; // SaveOptionsEnum var adSaveCreateOverWrite = 2; var scale = {A 9, B 11, C 0, D 2, E 4, F 5, G 7};// 音階 // 外部変数 var deflen = 4; var octave = 4; var rest = 0; var datalen;// データ長 var st; var timebase = 480; WScript.Quit(main()); //============================================================================== function main() { // 引数処理 var args = WScript.Arguments; if (args.length != 1) { WScript.Echo("usage cscript mml2smf.js mmlfile"); return 1; } var path_in = args(0); // パス名処理 var fso = WScript.CreateObject("Scripting.FileSystemObject"); path_in = fso.GetAbsolutePathName(path_in); var dir = fso.GetParentFolderName(path_in); var fnm = fso.GetBaseName(path_in); var path_out = dir + "\\" + fnm + ".mid"; // 入力ファイルのオープン var fi = fso.OpenTextFile(path_in, ForReading);// ASCII // ストリームのオープン st = WScript.CreateObject("ADODB.Stream"); st.Charset = "iso-8859-1"; st.Open(); // ヘッダチャンク WriteBE(4, 0x4d546864);// MThd WriteBE(4, 6);// データ長 WriteBE(2, 0);// フォーマットタイプ WriteBE(2, 1);// トラック数 WriteBE(2, timebase);// タイムベース // トラックチャンク WriteBE(4, 0x4d54726b);// MTrk WriteBE(4, 0);// データ長(仮) datalen = 0; while (! fi.AtEndOfStream) { var line = fi.ReadLine(); line.match(/[^ ]*/); line = RegExp.lastMatch; var token = line.match(/[ A-GLORT][#+\-\d\.]*/gi); if (token == null) continue; for (var n = 0; n token.length; n++) { var cmd = token[n].substr(0, 1).toUpperCase(); var param = token[n].substr(1); switch (cmd) { case " " octave--; break; case " " octave++; break; case "A" case "B" case "C" case "D" case "E" case "F" case "G" Note(cmd, param); break; case "L" deflen = parseInt(param); break; case "O" octave = parseInt(param); break; case "R" Rest(param); break; case "T" var tempo = parseInt(param); WriteData(0, 0xff, 0x51, 3); WriteBE(3, 60000000 / tempo);// 4分音符のマイクロ秒数 break; } } } fi.Close(); // トラック終了 WriteData(rest, 0xff, 0x2f, 0x00); st.Position -= datalen + 4; WriteBE(4, datalen);// データ長 // ストリームをファイルに保存 st.SaveToFile(path_out, adSaveCreateOverWrite); st.Close(); // 再生 var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run(path_out); return 0; } function WriteBE(count, value) { for (var n = count - 1; 0 = n; n--) { st.WriteText(String.fromCharCode( (value (8 * n)) 0xff )); } datalen += count; } function WriteData(t, cmd, d1, d2) { // 可変長tick var v = ((t 0xfe00000) 3)|((t 0x1fc000) 2)|((t 0x3f80) 1)|(t 0x7f)|0x80808000; for (var n = 3; 0 = n; n--) { var b = (v (8 * n)) 0xff; if (b != 0x80) { WriteBE(1, b); } } WriteBE(1, cmd); WriteBE(1, d1); WriteBE(1, d2); } function Note(cmd, param) { param.match(/([#+]*)(\-*)(\d*)(\.*)/); // 臨時記号 accidental var acci = RegExp.$1.length - RegExp.$2.length; var note = (octave + 1) * 12 + scale[cmd] + acci; var value = (RegExp.$3 == "") ? deflen parseInt(RegExp.$3); var dot = RegExp.$4.length; var tick = timebase * 4 / value; tick += tick * ((1 dot) - 1) / (1 dot); var gate = tick * 7 / 8; WriteData(rest, 0x90, note, 0x70); WriteData(gate, 0x80, note, 0x00); rest = tick - gate; } function Rest(param) { param.match(/(\d*)(\.*)/); var value = (RegExp.$1 == "") ? deflen parseInt(RegExp.$1); var dot = RegExp.$2.length; var tick = timebase * 4 / value; tick += tick * ((1 dot) - 1) / (1 dot); rest += tick; } mml.txt アニーローリー スコットランド民謡 t150 e8.d16 c.c8 c. b8 ba2a g.e8ed8c8 d2. e8.d16 c.c8 c. b8 ba2a g.e8d.c8 c2r g c.c8d.d8 e2. g c.c8d.d8 e2. o5 e8.d16 c. b8a c8 a8 ge2e8.d16 c8 c e8d.c8 c2.
https://w.atwiki.jp/sampleisbest/pages/298.html
chkpath PATH環境変数に特定文字列が含まれるかチェック groupby.js ADODB 集計 mml2smf.js MMLファイルからSMFを作る mml2smf2.js MMLファイルからSMFを作る#2 mml2smf3 MML- SMF マルチトラック mml2smf4 MML- SMF マルチチャネル mml2smf5 MML- SMF マルチトラック#2 sql1 CSVファイルをSQLで sql2 CSVファイルをSQLで2
https://w.atwiki.jp/suffix/pages/1147.html
http //kandk.cafe.coocan.jp/jeans/index.php?itemid=630のサイトに分かりやすい記載があり、 COMオブジェクトを通じることで、JScriptからVBScriptを実行する方法がある。 参考サイトも是非見てみよう! var ScriptControl = WScript.CreateObject("MSScriptControl.ScriptControl"); ScriptControl.language="スクリプト言語名(JScript/VBScript等)"; ScriptControl.addCode="その言語の記述"; ScriptControl.eval("addCodeで指定した関数で呼び出したい関数",引数等); 他にも、wscにまとめることで複数スクリプトを実行する方法もある模様。 参考: http //msdn.microsoft.com/en-us/library/aa227633%28v=vs.60%29.aspx http //www.geocities.jp/maru3128/SakuraMacro/usage/wsc.html
https://w.atwiki.jp/tomokazu0525/pages/90.html
最終更新日時2011-09-29ここを編集 ■目次 英語 ページフッタこのページの1階層上のページ このページの1階層下のページ このページに含まれるタグ このページへのアクセス数 ■本文 JavaScriptとJscriptの違い|てくらぼ|パソナテック(PASONA TECH) VB で JScript が使える createElementの使い方 ( しゃいん☆のブログ| 名古屋市 Webシステム開発 サーバ構築 ネットワーク構築 株式会社コネクティボ ) JavaScriptでロールオーバーメニューを作る Cool Web Window 上記URLおよび、 Office TANAKA - Excel VBA FileSystemObject を参考にして動いたやつ。 Sub test_jscript() Dim FSO As Object, buf As String Set FSO = CreateObject("Scripting.FileSystemObject") With FSO.GetFile("C \Documents and Settings\(ユーザー名)\My Documents\test.js").OpenAsTextStream buf = .ReadAll .Close End With Set FSO = Nothing Dim SC As Object Set SC = CreateObject("ScriptControl") SC.Language = "JScript" SC.AddCode (buf) MsgBox (SC.eval("func(1, 2, 3, 4)")) End Sub ファイル名:text.js var func = function (){ var result = 0; for (var i = 0; i arguments.length; i++) { result += arguments[i]; }; return result; }; 勉強用メモ - EXCEL/VBA/XPATH ★★ 【ハウツー】Excel VBAでWebサービス - ExcelでJScriptの機能を利用しよう (1) はじめに | パソコン | マイナビニュース webbrowserコントロール(VBからJScriptの関数を実行できますか?) VBAでJSONファイルをパースする - SO NOTE そうのて (;^ω^) VBAからJScriptのescape()を使う。 Windows Script Programming ExcelVBAで、URLエンコーディングをする方法っていうか、JavaScriptを使う方法 - ウィリアムのいたずらの開発日記 英語 How To Call Functions Using the Script Control Using ScriptControl Methods サイト名:MSDN 【VB、VBAとの連携】 VBAからWEBページ上に書かれたJavaScriptを動かす方法 [429] Client error `POST https //webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response { __type com.amazon.paapi5#TooManyRequestsException , Errors [{ Code TooManyRequests , Message The request was de (truncated...) [429] Client error `POST https //webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response { __type com.amazon.paapi5#TooManyRequestsException , Errors [{ Code TooManyRequests , Message The request was de (truncated...) ページフッタ このページの1階層上のページ このページの1階層下のページ このページに含まれるタグ VBA javascript jscript このページへのアクセス数 今日: - 昨日: - これまで合計: -
https://w.atwiki.jp/yasrun/pages/55.html
IEオブジェクトを作成して指定したURLのWEBページを取得し、 innerTextを表示&クリップボードへ。 あくまでinnerTextであって、HTMLソースをごそっととってこれるわけではない。 useIE.vbs Dim url url = inputBox("URLを入力してね。","URLの入力", "http //") if url = "" or url = "http //" then Wscript.echo "おしまい" Wscript.quit end if Wscript.echo "はじまり" Dim objIE Set objIE = CreateObject("InternetExplorer.Application") objIE.navigate url Do Until objIE.Busy = False Wscript.sleep(200) loop do until objIE.document.readyState = "complete" Wscript.sleep(200) loop Dim data data = objIE.document.Body.innerText data = Replace(data, vbCrLf, "") Wscript.echo data objIE.Document.parentWindow.clipboardData.setData "text", data objIE.quit Wscript.echo "おわり" Wscript.quit トータル - 今日 - 昨日 -
https://w.atwiki.jp/sampleisbest/pages/316.html
開発環境 メモ帳 実行環境 Microsoft Windows 8.1 (64bit) mml2smf3.js // OpenTextFile var ForReading = 1; // SaveOptionsEnum var adSaveCreateOverWrite = 2; var scale = {A 9, B 11, C 0, D 2, E 4, F 5, G 7};// 音階 // 外部変数 var timebase = 480; var deflen = 4; var octave = 4; var rest = 0; var st;// ストリーム var sharp = ""; var flat = ""; var trk = new Array(); var trkno = 0; var seqno = 0; var atick = 0;// absolute tick WScript.Quit(main()); //============================================================================== function main() { // 引数処理 var args = WScript.Arguments; if (args.length != 1) { WScript.Echo("usage cscript mml2smf2.js mmlfile"); return 1; } var path_in = args(0); // パス名処理 var fso = WScript.CreateObject("Scripting.FileSystemObject"); path_in = fso.GetAbsolutePathName(path_in); var dir = fso.GetParentFolderName(path_in); var fnm = fso.GetBaseName(path_in); var path_out = dir + "\\" + fnm + ".mid"; // 入力ファイルのオープン var fi = fso.OpenTextFile(path_in, ForReading);// ASCII trk[trkno] = new Array(); while (! fi.AtEndOfStream) { var line = fi.ReadLine(); ParseLine for (var c = 0; c line.length; ) { var cmd = line.substr(c++, 1).toUpperCase(); var param = line.substr(c); switch (cmd) { case "\t" case " " case "|" break; case "%" SeqData(rest, new Array(0xff, 0x2f, 0)); rest = 0; trk[++trkno] = new Array(); seqno = 0; atick = 0; break; case " " break ParseLine; case " " octave--; break; case " " octave++; break; case "A" case "B" case "C" case "D" case "E" case "F" case "G" c += Note(cmd, param); break; case "K" // 調号 key signature var p = param.match(/^([#+\-])([A-G]+)/i); c += p[0].length; if (p[1] == "-") { flat = p[2].toUpperCase(); } else { sharp = p[2].toUpperCase(); } break; case "L" var p = param.match(/^(\d*)/); c += p[0].length; deflen = parseInt(p[1]); break; case "O" var p = param.match(/^(\d*)/); c += p[0].length; octave = parseInt(p[1]); break; case "R" c += Rest(param); break; case "T" var p = param.match(/^(\d*)/); c += p[0].length; var tempo = parseInt(p[1]); var usec = 60000000 / tempo;// 4分音符のマイクロ秒数 SeqData(rest, new Array(0xff, 0x51, 3, (usec 16) 0xff, (usec 8) 0xff, usec 0xff)); rest = 0; break; } } } fi.Close(); // トラック終了 SeqData(rest, new Array(0xff, 0x2f, 0)); //----------------------------------------------------------------------------- // ストリームのオープン st = WScript.CreateObject("ADODB.Stream"); st.Charset = "iso-8859-1"; st.Open(); // ヘッダチャンク WriteBE(4, 0x4d546864);// MThd WriteBE(4, 6);// データ長 WriteBE(2, 1);// フォーマットタイプ WriteBE(2, trkno + 1);// トラック数 WriteBE(2, timebase);// タイムベース for (var tr in trk) { // トラックチャンク WriteBE(4, 0x4d54726b);// MTrk WriteBE(4, 0);// データ長(仮) var datalen = 0; var prevtick = 0; seq = trk[tr]; for (var s in seq) { var data = seq[s]; var t = data.tick - prevtick; prevtick = data.tick; // 可変長tick var v = ((t 0xfe00000) 3)|((t 0x1fc000) 2)|((t 0x3f80) 1)|(t 0x7f)|0x80808000; for (var n = 3; 0 = n; n--) { var b = (v (8 * n)) 0xff; if (b != 0x80) { st.WriteText(String.fromCharCode(b)); datalen++; } } for (var d = 0; d data.length; d++) { st.WriteText(String.fromCharCode(data[d])); datalen++; } } var pos = st.Position; st.Position = pos - datalen - 4; WriteBE(4, datalen);// データ長 st.Position = pos; } // ストリームをファイルに保存 st.SaveToFile(path_out, adSaveCreateOverWrite); st.Close(); // 再生 var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run(path_out); return 0; } function WriteBE(count, value) { for (var n = count - 1; 0 = n; n--) { st.WriteText(String.fromCharCode( (value (8 * n)) 0xff )); } } function SeqData(tick, data) { data.tick = (atick += tick); trk[trkno][seqno++] = data; } // 音符処理 function Note(cmd, param) { var p = param.match(/^(\/?)([#+]*)(\-*)(\d*)(\.*)( ?)/); // 臨時記号 accidental var acci; if (p[1]) { acci = 0; } else { acci = p[2].length - p[3].length; if (acci == 0) { if (sharp.indexOf(cmd) != -1) acci = 1; if (flat.indexOf(cmd) != -1) acci = -1; } } var note = (octave + 1) * 12 + scale[cmd] + acci; var value = (p[4] == "") ? deflen parseInt(p[4]); var dot = p[5].length; var tick = timebase * 4 / value; tick += tick * ((1 dot) - 1) / (1 dot); var gate = (p[6]) ? tick tick * 7 / 8; // タイ処理 var seq = trk[trkno]; if (rest == 0 0 seqno seq[seqno-1][0] == 0x80 seq[seqno-1][1] == note) { seq[seqno-1].tick = (atick += gate); } else { SeqData(rest, new Array(0x90 | trkno, note, 0x70)); SeqData(gate, new Array(0x80 | trkno, note, 0x00)); } rest = tick - gate; return p[0].length; } // 休符処理 function Rest(param) { var p = param.match(/^(\d*)(\.*)/); var value = (p[1] == "") ? deflen parseInt(p[1]); var dot = p[2].length; var tick = timebase * 4 / value; tick += tick * ((1 dot) - 1) / (1 dot); rest += tick; return p[0].length; } もろびとこぞりて.txt t110 k+fc o5dc8. b16 a.g8 fe d.a8 b.b8 o5c.c8 t55d.t110d8 d8c8 b8a8 a8.g16f8 d8 d8c8 b8a8 a8.g16f8f8 f8f8f8f16g16 a.g16f16 e8e8e8e16f16 g.f16e16 d8 d b8 a8.g16f8g8 fe d2 % o4fa8.g16 f.e8 dc d.a8 g.g8 e.e8 f.f8 f8a8g8f8 f8.e16d8f8 f8a8g8f8 f8.e16d8d8 d8d8d8d16e16 f.e16d16 c8c8c8c16d16 e.d16c16 d8 fg8 f8.e16d8e8 dc d2
https://w.atwiki.jp/sampleisbest/pages/309.html
実行環境 Microsoft Windows 8.1 (64bit) mml2smf2.js // OpenTextFile var ForReading = 1; // SaveOptionsEnum var adSaveCreateOverWrite = 2; var scale = {A 9, B 11, C 0, D 2, E 4, F 5, G 7};// 音階 // 外部変数 var timebase = 480; var deflen = 4; var octave = 4; var rest = 0; var datalen;// データ長 var st;// ストリーム var sharp = ""; var flat = ""; var seq = new Array(); var seqno = 0; var atick = 0;// absolute tick WScript.Quit(main()); //============================================================================== function main() { // 引数処理 var args = WScript.Arguments; if (args.length != 1) { WScript.Echo("usage cscript mml2smf2.js mmlfile"); return 1; } var path_in = args(0); // パス名処理 var fso = WScript.CreateObject("Scripting.FileSystemObject"); path_in = fso.GetAbsolutePathName(path_in); var dir = fso.GetParentFolderName(path_in); var fnm = fso.GetBaseName(path_in); var path_out = dir + "\\" + fnm + ".mid"; // 入力ファイルのオープン var fi = fso.OpenTextFile(path_in, ForReading);// ASCII while (! fi.AtEndOfStream) { var line = fi.ReadLine(); ParseLine for (var c = 0; c line.length; ) { var cmd = line.substr(c++, 1).toUpperCase(); var param = line.substr(c); switch (cmd) { case "\t" case " " case "|" break; case " " break ParseLine; case " " octave--; break; case " " octave++; break; case "A" case "B" case "C" case "D" case "E" case "F" case "G" c += Note(cmd, param); break; case "K" // 調号 key signature var p = param.match(/^([#+\-])([A-G]+)/i); c += p[0].length; if (p[1] == "-") { flat = p[2].toUpperCase(); } else { sharp = p[2].toUpperCase(); } break; case "L" var p = param.match(/^(\d*)/); c += p[0].length; deflen = parseInt(p[1]); break; case "O" var p = param.match(/^(\d*)/); c += p[0].length; octave = parseInt(p[1]); break; case "R" c += Rest(param); break; case "T" var p = param.match(/^(\d*)/); c += p[0].length; var tempo = parseInt(p[1]); var usec = 60000000 / tempo;// 4分音符のマイクロ秒数 SeqData(rest, new Array(0xff, 0x51, 3, (usec 16) 0xff, (usec 8) 0xff, usec 0xff)); rest = 0; break; } } } fi.Close(); // トラック終了 SeqData(rest, new Array(0xff, 0x2f, 0)); //----------------------------------------------------------------------------- // ストリームのオープン st = WScript.CreateObject("ADODB.Stream"); st.Charset = "iso-8859-1"; st.Open(); // ヘッダチャンク WriteBE(4, 0x4d546864);// MThd WriteBE(4, 6);// データ長 WriteBE(2, 0);// フォーマットタイプ WriteBE(2, 1);// トラック数 WriteBE(2, timebase);// タイムベース // トラックチャンク WriteBE(4, 0x4d54726b);// MTrk WriteBE(4, 0);// データ長(仮) datalen = 0; var prevtick = 0; for (var s in seq) { var data = seq[s]; var t = data.tick - prevtick; prevtick = data.tick; // 可変長tick var v = ((t 0xfe00000) 3)|((t 0x1fc000) 2)|((t 0x3f80) 1)|(t 0x7f)|0x80808000; for (var n = 3; 0 = n; n--) { var b = (v (8 * n)) 0xff; if (b != 0x80) { st.WriteText(String.fromCharCode(b)); datalen++; } } for (var d = 0; d data.length; d++) { st.WriteText(String.fromCharCode(data[d])); } datalen += data.length; } st.Position -= datalen + 4; WriteBE(4, datalen);// データ長 // ストリームをファイルに保存 st.SaveToFile(path_out, adSaveCreateOverWrite); st.Close(); // 再生 var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run(path_out); return 0; } function WriteBE(count, value) { for (var n = count - 1; 0 = n; n--) { st.WriteText(String.fromCharCode( (value (8 * n)) 0xff )); } datalen += count; } function SeqData(tick, data) { data.tick = (atick += tick); seq[seqno++] = data; } // 音符処理 function Note(cmd, param) { var p = param.match(/^(\/?)([#+]*)(\-*)(\d*)(\.*)( ?)/); // 臨時記号 accidental var acci; if (p[1]) { acci = 0; } else { acci = p[2].length - p[3].length; if (acci == 0) { if (sharp.indexOf(cmd) != -1) acci = 1; if (flat.indexOf(cmd) != -1) acci = -1; } } var note = (octave + 1) * 12 + scale[cmd] + acci; var value = (p[4] == "") ? deflen parseInt(p[4]); var dot = p[5].length; var tick = timebase * 4 / value; tick += tick * ((1 dot) - 1) / (1 dot); var gate = (p[6]) ? tick tick * 7 / 8; // タイ処理 if (rest == 0 0 seqno seq[seqno-1][0] == 0x80 seq[seqno-1][1] == note) { seq[seqno-1].tick = (atick += gate); } else { SeqData(rest, new Array(0x90, note, 0x70)); SeqData(gate, new Array(0x80, note, 0x00)); } rest = tick - gate; return p[0].length; } // 休符処理 function Rest(param) { var p = param.match(/^(\d*)(\.*)/); var value = (p[1] == "") ? deflen parseInt(p[1]); var dot = p[2].length; var tick = timebase * 4 / value; tick += tick * ((1 dot) - 1) / (1 dot); rest += tick; return p[0].length; } トロイカ.txt トロイカ ロシア民謡 Ch1 t130 k-bea g8 | c.c8c8c8 b/8 c8 | d. b/8gr8g8 | ec ef8f8 | g2.r8g8 | c.d8e8d8c8 a16g16 | f.a8 cd8c8 | o4 g.a8g8f8d8e8 | c2.g | c.d8e8d8c8 a16g16 | f.a8 cd8c8 | g.a8g8f8d8e8 | c2.r8 浜辺の歌.txt 浜辺の歌 t72 k-b c8 | cf16g16ag16f16 | g d8fe16d16 | c f8ag16f16 | g. g8r8 | c8 | cf16g16ag16f16 | g d8fe16d16 | c a8cg8 | f. f8r8 | o5 c8 | c g8 c g+8 | c. a d8 | d b8fg8 | t60 c. c8r8 t72 | o4 c8 | cf16g16a g16 f16 | g d8fe16d16 | ca8cg8 | f. f8r8 |